package com.choupin.choupin.utils.redis;

import com.choupin.choupin.service.exception.RedisInsertException;
import io.lettuce.core.dynamic.annotation.Value;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.Map;

/**
 * RedisHashUtil工具类，用于封装Redis的hash集合操作
 */
public class RedisHashUtil {

    private static JedisPool jedisPool;



    static {
        // 初始化Jedis连接池配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(100); // 设置最大连接数
        config.setMaxIdle(20); // 设置最大空闲连接数
        config.setMinIdle(10); // 设置最小空闲连接数
        config.setMaxWaitMillis(3000); // 设置等待超时时间

        // 初始化Jedis连接池
        jedisPool = new JedisPool(config,"localhost", 6379);
    }

    /**
     * 获取Jedis连接
     * @return Jedis连接对象
     */
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }

    /**
     * 添加键值对到hash集合中
     * @param key hash集合的key
     * @param field field字段
     * @param value field对应的值
     */
    public static void hset(String key, String field, String value) {
        try (Jedis jedis = getJedis()) {
            jedis.hset(key, field, value);
        }
    }

    /**
     * 添加键值对到hash表
     * @Param key hash表名
     * @Param Map<String,String> 字段和值
     * @Return null
     * */

    public static void multipleHSet(String key,Map<String,String> map){
        try (Jedis jedis = getJedis()) {
            if (map.size()==0||map==null){
                throw new RedisInsertException("参数为空");
            }
           jedis.hmset(key,map);
        }
    }


    /**
     * 从hash集合中获取指定field的值
     * @param key hash集合的key
     * @param field field字段
     * @return field对应的值
     */
    public static String hget(String key, String field) {
        try (Jedis jedis = getJedis()) {
            return jedis.hget(key, field);
        }
    }

    /**
     * 删除hash集合中的指定field
     * @param key hash集合的key
     * @param field field字段
     */
    public static void hdel(String key, String field) {
        try (Jedis jedis = getJedis()) {
            jedis.hdel(key, field);
        }
    }

    /**
     * 判断hash集合中是否存在指定的field
     * @param key hash集合的key
     * @param field field字段
     * @return 如果存在返回true，否则返回false
     */
    public static boolean hexists(String key, String field) {
        try (Jedis jedis = getJedis()) {
            return jedis.hexists(key, field);
        }
    }

    /**
     * 获取hash集合中的所有field和value
     * @param key hash集合的key
     * @return 包含所有field和value的Map对象
     */
    public static Map<String, String> hgetAll(String key) {
        try (Jedis jedis = getJedis()) {
            return jedis.hgetAll(key);
        }
    }
}
